home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 7 / Apprentice-Release7.iso / Environments / Clean 1.2.4 / IOInterface / windowAccess.icl < prev    next >
Encoding:
Modula Implementation  |  1995-03-10  |  2.8 KB  |  100 lines  |  [TEXT/3PRM]

  1. implementation module windowAccess;
  2.  
  3.  
  4. import    StdInt;
  5. import    pointer, quickdraw, windows;
  6. import    commonDef, ioState;
  7.  
  8.  
  9. ::    DrawMode            :== Int;
  10.  
  11.  
  12. DrawNoControls            :== 0;
  13. HasControls                :== 1;
  14. HasNoControls            :== 2;        // for FixedWindows
  15.  
  16. ScrollBarWidth            :== 15;
  17. TitleBarWidth            :== 20;
  18. MenuBarWidth            :== 20;
  19. WindowScreenBorder        :== 4;
  20.  
  21. WindowPtrNextWindow        :== 144;
  22.  
  23.  
  24. //    General rules:
  25.  
  26. WindowAccessError :: String String -> .x;
  27. WindowAccessError f error = Error f "windowAccess" error;
  28.  
  29. WindowSystemState_WindowHandles    :: !(DeviceSystemState s) -> WindowHandles s;
  30. WindowSystemState_WindowHandles (WindowSystemState windows) = windows;
  31. WindowSystemState_WindowHandles _
  32.     =     WindowAccessError "WindowSystemState_WindowHandles" "argument is no WindowSystemState";
  33.  
  34. Window_size :: !WindowPtr !Toolbox -> (!Point, !Toolbox);
  35. Window_size wPtr tb
  36.     =     ((right - left,bottom - top), tb4);
  37.     where {
  38.         (top,   tb1) = LoadWord (wPtr + 16) tb;
  39.         (left,  tb2) = LoadWord (wPtr + 18) tb1;
  40.         (bottom,tb3) = LoadWord (wPtr + 20) tb2;
  41.         (right, tb4) = LoadWord (wPtr + 22) tb3;
  42.     };
  43.  
  44. WindowGetFrameSize :: !(WindowHandle s) !Toolbox -> (!Point, !Toolbox);
  45. WindowGetFrameSize (wDef, (wPtr,_,_,_,_,_)) tb
  46. |    IsScrollWindow wDef    = ((w-ScrollBarWidth, h-ScrollBarWidth), tb1);
  47.                         = (size, tb1);
  48.     where {
  49.         (w, h)        = size;
  50.         (size, tb1)    = Window_size wPtr tb;
  51.     };
  52.  
  53.  
  54. UpdateDrawMode :: !(WindowDef s (IOState s)) -> DrawMode;
  55. UpdateDrawMode wDef
  56. |    IsScrollWindow wDef    = HasControls;
  57.                         = HasNoControls;
  58.  
  59. WindowDefGetDrawMode :: !(WindowDef s (IOState s)) -> DrawMode;
  60. WindowDefGetDrawMode wDef
  61. |    IsScrollWindow wDef    = DrawNoControls;
  62.                         = HasNoControls;
  63.  
  64.  
  65. //    Common access rules:
  66.  
  67. WindowGetPtr :: !Window -> WindowPtr;
  68. WindowGetPtr (wPtr,_,_,_,_,_) = wPtr;
  69.  
  70. WindowHandleGetPtr :: !(WindowHandle s) -> WindowPtr;
  71. WindowHandleGetPtr (_, window) = WindowGetPtr window;
  72.  
  73. DummyWindowHandle :: WindowPtr -> WindowHandle s;
  74. DummyWindowHandle wPtr
  75.     =     (dummyWindowDef, dummyWindow);
  76.     where {
  77.         dummyWindowDef    = FixedWindow 0 p "" (p,p) dummyUpdF [];
  78.         dummyWindow        = (wPtr, (0,0,0), (0,0,0), 0, [], (0,0));
  79.         p                = (0,0);
  80.  
  81.         dummyUpdF :: UpdateArea *s -> (*s, [DrawFunction]);
  82.         dummyUpdF _ s = (s, []);
  83.     };
  84.  
  85.  
  86. ChangeAllWindowPtrs :: !(WindowPtr -> Toolbox -> Toolbox) !(IOState s) -> IOState s;
  87. ChangeAllWindowPtrs f ioState
  88.     =    IOStateChangeToolbox (ChangeWindowPtrs f wHs) ioState1;
  89.     where {
  90.         (windows, ioState1) = IOStateGetDevice ioState WindowDevice;
  91.         (wHs,_)                = WindowSystemState_WindowHandles windows;
  92.     };
  93.  
  94. ChangeWindowPtrs :: !(WindowPtr -> Toolbox -> Toolbox) ![WindowHandle s] !Toolbox -> Toolbox;
  95. ChangeWindowPtrs f [wH : wHs] tb = ChangeWindowPtrs f wHs (f (WindowHandleGetPtr wH) tb);
  96. ChangeWindowPtrs _ _ tb = tb;
  97.  
  98. CloseWindow :: !(IOState s) -> IOState s;
  99. CloseWindow ioState = IOStateRemoveDevice (ChangeAllWindowPtrs DisposeWindow ioState) WindowDevice;
  100.